const LoaderUtils = {
  createFilesMap: function (files) {
    const map = {};

    for (let i = 0; i < files.length; i++) {
      const file = files[i];
      map[file.name] = file;
    }

    return map;
  },

  getFilesFromItemList: function (items, onDone) {
    // TOFIX: setURLModifier() breaks when the file being loaded is not in root

    let itemsCount = 0;
    let itemsTotal = 0;

    const files = [];
    const filesMap = {};

    function onEntryHandled() {
      itemsCount++;

      if (itemsCount === itemsTotal) {
        onDone(files, filesMap);
      }
    }

    function handleEntry(entry) {
      if (entry.isDirectory) {
        const reader = entry.createReader();
        reader.readEntries(function (entries) {
          for (let i = 0; i < entries.length; i++) {
            handleEntry(entries[i]);
          }

          onEntryHandled();
        });
      } else if (entry.isFile) {
        entry.file(function (file) {
          files.push(file);

          filesMap[entry.fullPath.slice(1)] = file;
          onEntryHandled();
        });
      }

      itemsTotal++;
    }

    for (let i = 0; i < items.length; i++) {
      const item = items[i];

      if (item.kind === 'file') {
        handleEntry(item.webkitGetAsEntry());
      }
    }
  },
};

export { LoaderUtils };
